package com.reggie.service.service;

import com.reggie.acl.dataobject.AddressBook;
import com.reggie.service.model.request.AddressBookSaveRequest;
import com.reggie.service.model.request.AddressBookSetDefaultRequest;
import com.reggie.service.model.request.AddressBookUpdateRequest;

import java.util.List;
import java.util.Optional;

/**
 * <p>
 * 地址管理 服务类
 * </p>
 *
 * @author yth
 * @since 2023-02-04
 */
public interface AddressBookService {

    /**
     * 根据用户id，查询所有地址<p>
     * 结果排序规则为默认地址优先，更新时间降序
     *
     * @param userId 用户id
     * @return 地址集合
     */
    List<AddressBook> listByUserId(long userId);

    /**
     * 添加收获地址<p>
     * 用户添加的第一个地址默认作为默认地址，否则添加的地址作为非默认地址
     *
     * @param request 请求
     * @return true
     */
    boolean save(AddressBookSaveRequest request);

    /**
     * 根据用户id、地址簿id，设置默认地址<p>
     * 用户的原默认地址修改为非默认地址，地址簿id对应地址修改为默认地址
     *
     * @param request 请求
     */
    void setDefault(AddressBookSetDefaultRequest request);

    /**
     * 根据id，查询
     *
     * @param id 地址簿id
     * @return 数据
     */
    Optional<AddressBook> getById(long id);

    /**
     * 修改收货地址
     *
     * @param request 地址信息
     */
    void update(AddressBookUpdateRequest request);

    /**
     * 根据id集合，批量删除
     *
     * @param ids id集合
     */
    void removeByIds(List<Long> ids);

    /**
     * 根据用户id，得到ta的默认地址
     *
     * @param userId 用户id
     * @return 数据
     */
    Optional<AddressBook> getDefault(long userId);
}
